#include "include.h"
#include "func.h"
#include "func_idle.h"

#if FUNC_IDLE_EN
#define IDLE_LIGHT_IDLE_TIMEOUT 60*60
u16 ilde_timeout=0;
AT(.text.func.idle)
void idle_reset_light_idle_timeout(void)
{
	sys_cb.light_idle_cnt=0;
}
AT(.text.func.bt)
u8 idle_check_light_status(void)
{
	if(bsp_get_light_mode()!=0)
	{
		sys_cb.light_idle_cnt++;
		printf("light time out cnt:%d\n",sys_cb.light_idle_cnt);
		if(sys_cb.light_idle_cnt>=IDLE_LIGHT_IDLE_TIMEOUT)
		{
			bsp_set_light_off();
			sys_cb.light_idle_cnt=0;
			sys_cb.pwrdwn_tone_en = 0;
			ilde_timeout=0xffff;
			set_sys_clk(SYS_2M);
			return 0;
		}
		return 1;
	}
	return 0;
}

AT(.text.func.idle)
void func_ilde_timeout(void)
{
	u16 max_timeout;
	if(idle_check_light_status())
	{
		ilde_timeout=0;
		return;
	}
	if(ilde_timeout==0xffff)
	{
		return;
	}
	ilde_timeout++;
	printf("idle time out:%d\n",ilde_timeout);
	if(ilde_timeout>=10)
	{
		ilde_timeout=0xffff;
		bsp_set_light_off();
		sys_cb.pwrdwn_tone_en = 0;		
		set_sys_clk(SYS_2M);
		//func_cb.sta=FUNC_PWROFF;
	}
}
AT(.text.func.idle)
void func_idle_process(void)
{
    func_process();
}
#define TCHKEY_DET_PIN	4  //PA4

AT(.text.func.idle)
void func_tchkey_power_ctl(u8 onoff)
{
	printf("onoff:%d\n",onoff);
	return;
	if(onoff)
	{
		GPIOADE |= BIT(TCHKEY_DET_PIN);
		GPIOADIR &= ~BIT(TCHKEY_DET_PIN);
		GPIOASET = BIT(TCHKEY_DET_PIN);
	}
	else
	{
		GPIOADE |= BIT(TCHKEY_DET_PIN);
		GPIOADIR &= ~BIT(TCHKEY_DET_PIN);
		GPIOACLR = BIT(TCHKEY_DET_PIN);
	}
}

static void func_idle_enter(void)
{
	u16 msg;
	u8 key_cnt=0;
#if PLUGIN_FUNC_IDLE_ENTER_CHECK
    if (!plugin_func_idle_enter_check()) {  //可以处理开机, 判断是否要停在idle模式, 等待设备插入的方案.
        return;
    }
#endif
	msg_queue_clear();
	ilde_timeout=0;
	tchkey_power_off();
	sys_cb.amp_mute=0;
	amp_speaker_mute();
	while (1)
	{
		WDT_CLR();
		delay_ms(20);
		msg = msg_dequeue();
		printf("msg:0x%x\n",msg);
		if(msg==KL_HSF||msg==KL_HSF||msg==KU_HSF)
		{
			key_cnt=0;
		}
		else
		{
			key_cnt++;
			if(key_cnt>6)
			{
				break;
			}
		}
		
	}
    led_idle();
}

static void func_idle_exit(void)
{
    func_cb.last = FUNC_IDLE;
	
	if(get_cur_sysclk()<=SYS_48M)
	{
		set_sys_clk(SYS_CLK_SEL);
	}
	func_tchkey_power_ctl(1);
	tchkey_power_on();
}

AT(.text.func.idle)
void func_idle(void)
{
    printf("%s\n", __func__);

    func_idle_enter();

    while (func_cb.sta == FUNC_IDLE) {
        func_idle_process();
        func_idle_message(msg_dequeue());
        func_idle_display();
    }

    func_idle_exit();
}

#endif
